// cloudfunctions/getUserInfo/index.js
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()

exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  // 优先使用 event 中传递的 testOpenId，否则使用当前用户的 OPENID
  const effectiveOpenid = event.testOpenId || wxContext.OPENID;

  if (!effectiveOpenid) {
    return {
      success: false,
      message: '无法获取有效的 OPENID'
    }
  }

  // 如果是更新用户头像请求
  if (event.updateAvatar && event.userId && event.avatarUrl) {
    try {
      await db.collection('users').doc(event.userId).update({
        data: {
          avatar: event.avatarUrl,
          updateTime: new Date()
        }
      })
      return {
        success: true,
        message: '头像更新成功'
      }
    } catch (err) {
      console.error("更新头像失败:", err);
      return {
        success: false,
        message: '更新头像失败: ' + err.message
      }
    }
  }

  // 如果是更新用户名称请求
  if (event.updateName && event.userId && event.nickName) {
    try {
      await db.collection('users').doc(event.userId).update({
        data: {
          name: event.nickName,
          updateTime: new Date()
        }
      })
      return {
        success: true,
        message: '名称更新成功'
      }
    } catch (err) {
      console.error("更新名称失败:", err);
      return {
        success: false,
        message: '更新名称失败: ' + err.message
      }
    }
  }

  // 查找用户
  try {
    const userRes = await db.collection('users').where({
      openid: effectiveOpenid // 使用 effectiveOpenid
    }).get()

    // 如果用户存在
    if (userRes.data.length > 0) {
      const user = userRes.data[0]
      // 不再强制修改角色，直接返回数据库中的用户信息
      return {
        success: true,
        data: user
      }
    }
    // 用户不存在
    else {
      // 对于通过 testOpenId 登录的场景，如果用户不存在，我们应该提示错误
      
      if (event.testOpenId) {
        return {
          success: false,
          message: "测试用户 openid: " + event.testOpenId + " 在数据库中不存在。"
        }
      }

      // 正常流程：新用户注册 (根据需要设置默认角色)
      const newUser = {
        openid: effectiveOpenid,
        name: '新用户', // 默认名
        avatar: '',   // 默认头像
        role: '学生', //  新用户默认为学生
        phone: '',
        roomNo: '',
        createTime: new Date(),
        updateTime: new Date()
      }
      
      // 如果小程序端在调用此函数创建新用户时传递了微信的 userInfo
      // (例如，在 login.js 中，可以在调用 getUserInfo 云函数时，将 wx.getUserProfile 获取到的 userInfo 作为参数传递)
      if (event.userInfoFromWx) { 
          newUser.name = event.userInfoFromWx.nickName || newUser.name;
          newUser.avatar = event.userInfoFromWx.avatarUrl || newUser.avatar;
      }

      const addUserRes = await db.collection('users').add({
        data: newUser
      })

      return {
        success: true,
        data: { ...newUser, _id: addUserRes._id }, //确保返回的数据包含 _id
        isNew: true
      }
    }
  } catch (err) {
    console.error("查找或创建用户失败:", err);
    return {
      success: false,
      message: '查找或创建用户失败: ' + err.message
    }
  }
}